Wichtig !!! | N E U E S ... | Inhalt | Hotline | Stichwortverzeichnis |
Kapitel 4
GrundlagenAllgemeines
Variablentypen
Operatoren
Mathematische Operatoren
Priorität der Operatoren
Vergleichsoperatoren
Pointer und Adressoperatoren
BASIC-Befehle
Der Omikron Basic 6 Editor akzeptiert eine ganze Reihe von BASIC-Befehlen, die Überbleibsel älterer Versionen
sind und dort unter anderem zur Steuerung des alten Editors und des alten Interpreters dienten. Diese Funktionen
werden in Omikron Basic 6 entweder vom Editor selbst ausgeführt (z.B. LIBRARY, DEFINT, RENUM usw.) oder sie
haben wegen der neuen Benutzeroberfläche überhaupt keine sinnvolle Bedeutung. Bei einigen handelt es
sich auch um typische Interpreterbefehle, die darum vom Compiler schon immer ignoriert wurden. Andere wiederum
benutzten spezielle Eigenschaften der ATARI-Hardware oder des ATARI-Betriebssystems und spielen deswegen auf dem
MAC keine Rolle.
Um die Kompatibilitätsprobleme mit alten Programm gering zu halten (meist reicht es schon, wenn die besagten
Befehle einfach ignoriet werden), wurde Omikron Basic 6 so programmiert, daß der Editor auch die ungültigen
Befehle versteht, diese vom Compiler aber übersprungen werden.
In dem Kapitel 'Der Befehlssatz' sind die bedeutungslosen Befehle in grauer Schrift dargestellt. Diese Schlüsselwörter
dürfen Sie für eigene Zwecke nicht verwenden.
Syntaxerklärung
Angaben in spitzen Klammern <...> sind durch entsprechende Ausdrücke zu ersetzen.
Angaben in eckigen Klammern [...] sind, je nach gewünschter Anwendung, wegzulassende Ergänzungen.
Sind um einen Ausdruck zwei eckige Klammern [[...]] gesetzt, so kann, je nach Anwendung, dieser Ausdruck weggelassen
werden, einmal oder mehrmals erscheinen.
Angaben in geschweiften Klammern {...|...} stellen eine Auswahl dar, aus der eine der durch | getrennten Alternativen
auszuwählen ist.
Zu den Beispielen:
Zu vielen Befehlen sind kurze Beispielprogramme in einem hellgelb hinterlegtem Feld angegeben. Die meisten dieser
Programme können direkt abgetippt werden. Um ein compilierbares Programm zu erhalten, müssen allerdings
noch einige Compiler Steuerwörter gesetzt werden. (Siehe das Programm Mandelbrot.BAS im Ordner DEMO). Bei
einigen Programmen werden auch Funktionen aus der ExtensionLibrary verwendet. In diesen Fällen muß die
Library vom Editor aus mit 'LIBRARY zuladen ...' vorher in das Programm integriert werden.
Bildschirmergebnisse stehen darunter in einem etwas dunklerem Gelb, sofern es sich nicht um Grafiken etc. handelt.
In diesen Fällen wird das Verhalten des Programms verbal beschrieben.
Weitere Erklärungen:
<num.Ausdruck>
Ein numerischer Ausdruck ist ein beliebiger Term, der ein numerisches Ergebnis liefert. Dabei spielt der Typ (ganzzahlig,
einfach- oder doppeltgenau) keine Rolle. Der Compiler führt bei der Übersetzung eine automatische Typconvertierung
durch. Wenn jedoch z.B. von einem Befehl immer nur ein Integertyp erwartet wird, sollten Sie darauf achten, daß
auch immer nur Integer übergeben werden. Dadurch wird das compilierte Programm kürzer und schneller.
<String-Ausdruck>
Ein Ausdruck vom Typ String.
<Dateiname>
Ein Dateiname ist ein String, der einen FileSpezificationRecord enthält
und folgenden Aufbau hat:
2 Byte VolumeReferenceNumber oder 0, wenn diese nicht bekannt ist.
4 Byte DirectoryIdentificationNumber oder 0, wenn diese nicht bekannt ist. 1 Byte Länge des nachfolgenden Dateinames,Dateipfades oder Teilpfades. 1-63 Byte Dateiname, Dateipfad oder Teilpfad. |
<num.Variable>
Numerische Variable gleich welchen Typs. In Einzelfällen sind möglicherweise nur einfache Variablen zugelassen
und keine Felder.
<Rückgabe-Variable>
Liefert den Ergebniswert eines Befehls oder einer Funktion zurück. Z.B. bei INPUT USING Art der Abbruchbedingung.
<Parameter>
Die an eine Funktion oder Prozedur übergebenen Werte. Bei Aufrufen mit CALL kann durch ein vorangestelltes
"L" eine Übergabe als Long-Integer bewirkt werden.
<Bitnummer>
Vorzeichenlose Zahl zwischen 0 und 31. Die Wertigkeit des entsprechenden Bits ist 2^<Bitnummer>
<Integer-Variable>
Ganzzahlige Variable (Word=16Bit oder Long=32Bit), auch Feldvariablen sind zulässig.
<Speicheradresse>
32 Bit breite Long-Integer-Zahl, die eine bestimmte Speicherzelle benennt.
<Marke>
Eine Marke bezeichnet eine bestimmte Stelle eines Programms und kann alle für Variablennamen zugelassenen
Zeichen enthalten. Eine Marke kann sein:
1. Eine bestimmte Zeile:
Wenn mit Zeilennummern gearbeitet wird, kann man durch Nennung der Nummer eine bestimmte Zeile erreichen. Die Zeilennummer
kann auch berechnet werden, d.h. als Marke ist auch ein beliebiger numerischer Ausdruck zugelassen. Wenn der Ausdruck
jedoch aus einer einzigen numerischen Variablen besteht, so ist diese in Klammern zu setzen, um nicht mit einem
Label verwechselt zu werden.
2. Ein bestimmtes Programm-Label:
An jeder Stelle des Programms kann mit "-<Bezeichner>" ein Label vereinbart werden. Der Bezeichner
darf alle für Variablennamen zugelassenen Zeichen enthalten (alle Buchstaben, Ziffern, "_" und die
Zeichen von 128 bis 255). Will man sich auf ein solches Label beziehen, wird einfach der Bezeichner genannt, das
vorangestellte Minuszeichen unterbleibt. Man kann stattdessen das Label auch über einen String-Ausdruck benennen.
Er muß den Bezeichner des Labels enthalten und sollte nicht länger als acht Zeichen sein, da der Compiler
nur die ersten 8 Zeichen zur Identifikation auswertet. (Gilt nur, wenn über einen String-Ausdruck auf das
Label zugegriffen wird).
Insgesamt empfiehlt es sich, auf numerische oder String-Ausdrücke für Zeilennummern bzw. Label zu verzichten, da diese zur Laufzeit erst ausgewertet werden müssen und der Programmablauf dadurch verlangsamt wird.
<Laufwerk>
Laufwerk steht für ein Volume (z.B. Festplatte, CD-ROM oder Diskette) und kann beliebige Namen haben gefolgt
von einem Doppelpunkt.
<Winkel>
Winkelangaben sind stets in 1/10 Grad vorzunehmen, d.h. z.B. 900 entspricht 90 Grad.
<Dateinummer>
Eine vorzeichenlose Zahl zwischen 1 und 16. Die Zahl steht in fester Verbindung mit der zugehörigen Datei
(siehe OPEN). Alle Befehle und Funktionen wirken auf die Datei, die der Dateinummer durch OPEN zugeordnet wurde.
Omikron Basic stellt eine ganze Reihe verschiedener Variablentypen zur Verfügung, die für die unterschiedlichen Zwecke nützlich sind. Im Interesse der Schnelligkeit des Programms sollte nach Möglichkeit immer mit Integer-Variablen gearbeitet werden, wenn als Variablenwert nur ganze Zahlen in Betracht kommen. Da Strings ganz besonders kompliziert sind, sollten sie vermieden werden, wenn es irgendwie geht.
Die Variablen-Namen können fast beliebig gebildet werden. Ein Variablen-Name kann auch mehrmals im gleichen Programm mit verschiedenen Postfixen (also verschiedenen Wertebereichen) vorkommen. Sie werden vollständig unabhängig voneinander verwaltet. Dafür sorgt das Postfix. Für Variablen-Namen sind die ASCII-Zeichen von 65 bis 90, 95, 97-122 und 128-255 erlaubt. Die Namen dürfen allerdings nicht mit einer Zahl beginnen, damit das BASIC sie von Konstanten unterscheiden kann.
Die Zeichen ab 128 können auf verschiedene Weise erreicht werden:
1. Mit einer Vortaste. Sie drücken zunächst F1 und geben dann ein normales Zeichen ein. Durch F1 wird zu dem ASCII-Code dieses Zeichens 64 addiert. Das gleiche bewirkt F2, nur daß 128 addiert wird.
2. Bei gedrückter 'Alt' Taste kann der ASCII-Code des Zeichens direkt über die Tasten des Zehnerblocks eingegeben werden. Sobald man die 'Alt' Taste losläßt oder 3 Ziffern eingegeben wurden, erscheint das Zeichen auf dem Bildschirm.
3. Durch eine Kombination der Modifier-Keys mit normalen Tasten können die länderspezifischen Sonderzeichen erreicht werden.
Damit läßt sich jetzt z.B. schreiben:
Länge = Höhe * SIN(ß)
Ein geeigneter Zeichensatz vorausgesetzt.
siehe auch ASCII-Codes
Im Einzelnen sind folgende Variablentypen möglich:
Integer
Integerzahlen sind ganze Zahlen, also Zahlen ohne Nachkommastellen. Ihr Zahlenbereich ist auf die unten angegebenen
Werte beschränkt. Der Vorteil von Integer-Zahlen ist die schnelle Abarbeitung und daß es keine
Rundungsfehler gibt.
Long-Integer: | Rechenbereich: | -2147483648 bis +2147483647 |
Speicherplatzbedarf: | 4 Bytes (= 4 Zeichen) | |
Postfix: | %L z.B. A%L, A%L(1) | |
Short-Integer: | Rechenbereich: | -32768 bis +32767 |
Speicherplatzbedarf: | 2 Bytes (= 2 Zeichen) | |
Postfix: | % z.B. A%, A%(1) | |
Byte-Integer: | Rechenbereich: | 0 bis 255 |
Speicherplatzbedarf: | 1 Byte (= 1 Zeichen) | |
Postfix: | %B z.B. A%B(1) | |
Flag/Boolean: | Rechenbereich: | "falsch" (0) und "wahr" (-1) |
Speicherplatzbedarf: | 1 Bit (= ein achtel Zeichen) | |
Postfix: | %F z.B. A%F(1) |
Float (Fließkomma)
Fließkommazahlen sind Zahlen mit Nachkommastellen. Ihr Zahlenbereich ist (fast) gar nicht begrenzt, da sie
einen Zehnerexponenten besitzen. Reicht der Zahlenbereich der Mantisse nicht aus, so wird der Exponent jeweils
um eins erhöht und die Mantisse wird um eine Stelle nach rechts geschoben. Je größer die Zahl ist,
desto ungenauer ist sie deshalb auch. Die Stellenanzahl bleibt aber immer gleich. Eine Fließkommazahl sieht
z.B. so aus:
123.45678 mal | 10 hoch 2 |
Mantisse | Exponent |
Single-Float: | Rechenbereich: | +/-1.4x10^-45 bis 3.4x10^+38 |
Genauigkeit: | 7-8 Stellen | |
Speicherplatzbedarf: | 4 Byte (= 4 Zeichen) | |
Postfix: | ! z.B. A!, A!(1) | |
Double-Float: | Rechenbereich: | +/-4.9x10^-324 bis 1.8x10^+308 |
Genauigkeit: | 15-16 Stellen | |
Speicherplatzbedarf: | 8 Byte (= 8 Zeichen) | |
Postfix: | # z.B. A#, A#(1) |
String (Zeichenkette)
Ein String ist eine Zeichenkette, d.h. ein Text von bis zu 2147483648 Zeichen Länge. Der Text kann alle beliebigen
Zeichen von 0 bis 255 enthalten. Strings werden vom Omikron Basic sehr effektiv verwalt, woraus eine gegenüber
anderen BASIC-Varianten sehr hohe Verarbeitungsgeschwindigkeit resultiert.Die Länge eines Strings kann sich
während des Programmablaufs beliebig ändern (Dynamische Stringverwaltung). Strings brauchen deshalb in
Omikron Basic nicht, wie in vielen anderen BASIC-Dialekten und Programmiersprachen, dimensioniert zu werden.
Da trotz der hochoptimierten Verwaltung die Verwendung von Strings niemals so schnell sein kann, wie die Arbeit
mit Integern, sollten Sie Strings nur benutzen, wenn das Problem nicht genau so gut mit Integern zu bewältigen
wäre.
Wenn Sie z.B. nur einen einzelnen Buchstaben benötigen, ist es - besonders in Schleifen, die häufig durchlaufen
werden - sinnvoll, statt des Buchstabens den entsprechenden ASCII-Wert einer Integervariablen zuzuweisen (siehe
ASC) und dann damit zu arbeiten.
String: | Speicherplatzbedarf: | 16 Bytes (= 16 Zeichen) plus die Länge des Strings. |
Postfix: | $ z.B. A$, A$(1) |
Zu den Variablennamen:
Die Variable A soll nur ein Beispiel sein. Grundsätzlich kann ein Variablenname aus bis zu 31 Buchstaben,
Ziffern, dem Unterstrich und allen Zeichen von 128 bis 255 bestehen. Das erste Zeichen davon darf allerdings
keine Zahl sein.
Oben wurde mehrmals die Variable A als Beispiel für Variablennamen genannt. Omikron
Basic unterscheidet jede einzelne Variable voneinander, obwohl sie alle A heißen.
Durch die Postfixe für die einzelnen Variablentypen unterscheiden sie sich bereits. Wenn Sie die Variable
A%L bereits verwendet haben, können Sie sogar noch ein davon unabhängiges Feld A%L(1) und
eines A%L(1,2) verwenden. Hier besteht nämlich der Unterschied in der Dimension der Felder. Es ist
jedoch besser, solche Namensgleichheiten zu vermeiden, sonst kann ein Progarmm schnell unübersichtlich werden.
Sie können übrigens für jedes als erstes Zeichen erlaubte Variablenzeichen einen Standard-Variablentyp
vergeben. Jede Variable, die mit eben diesem Buchstaben beginnt, hat dann automatisch den Standard-Variablentyp,
es sei denn, Sie geben das Postfix eines anderen Variablentyps explizit an. (s.a. Dialogbox
Editoreinstellungen)
Konstanten
Konstanten sind Zahlen, die sich nicht verändern, also keine Variablen. Aber auch sie haben einen Typ, der
den Variablentypen entspricht und von der Schreibweise und dem Wert der Konstanten abhängt:
123 | Short-Integer |
35000 | Long-Integer |
123. | Double-Float (#) |
1.3 | Double-Float |
1E20 | Single-Float |
123! | Single-Float |
123# | Double-Float |
1D20 | Double-Float |
1.23456789 | Double-Float |
"hallo" | String. |
Operatoren
Omikron Basic stellt eine große Anzahl von
Operatoren zur Verfügung, die nach Funktionsgruppen gegliedert nachfolgend besprochen werden.
Zeichen: | Bedeutung: |
+ |
Addition |
- |
Subtraktion |
* |
Multiplikation |
/ |
Division |
^ |
Potenzieren |
+= |
Addition mit Zuweisung |
-= |
Subtraktion mit Zuweisung |
*= |
Multiplikation mit Zuweisung |
/= |
Division mit Zuweisung |
\ | Integer-Division: Liefert das auf eine ganze Zahl abgerundete Ergebnis einer Division zurück |
MOD |
Modulo-Operator: Liefert den Rest einer ganzzahligen Division |
Omikron Basic stellt die folgenden Vergleichs-Operatoren zur Verfügung:
Zeichen: | Bedeutung: |
> | größer als |
< | kleiner als |
= | gleich |
>= | größer oder gleich |
<= | kleiner oder gleich |
<> | ungleich |
"*" greift auf ein Objekt zu (dereferenziert es). Direkt hinter dem Operator muß die Zeigervariable folgen. Welcher Typ gemeint ist, muß auch hier, wie bei einer normalen Variablen, noch mit einem Postfix angegeben werden. Speziell wenn es sich um einen Zeiger auf Funktionen handelt, ruft "*" die Funktion auf, auf die die Zeigervariable zeigt.
Alle hier aufgeführten Operatoren sind in Kapitel 5 im Einzelnen erklärt und nach Ihrer Priorität (Rangfolge) aufgelistet. Die weiter oben stehenden Operatoren haben eine höhere Priorität, als die darunter stehenden. Alle Operatoren in einer Zeile haben die gleiche Priorität.
( , ) (Klammern)
(höchste Priorität)
& (Adressoperator), *(Pointeroperator), FN (Funktion)
NOT, +, - (als Vorzeichen)
^ (Potenzieren)
SHL, SHR
*, /
\, MOD
+, -
<, <=, >, >=, <>
AND
OR
EQV, IMP, NAND, NOR, XOR (niedrigste Priorität)
Beispiel: |
|
Ergebnis: |
|
Beispiel: |
|
Ergebnis: |
|